// 二维码工具箱首页 - iOS风格
Page({
  data: {
    // 扫码动画状态
    scanAnimation: false,
    
    // 广告显示状态
    showAd: true,
    
    // 历史记录数量统计
    totalHistory: 0,
    
    // 最近使用项目（前6个）
    recentItems: [],
    
    // 最近使用详情弹窗
    showRecentDetail: false,
    currentRecentItem: null,
    
    // 扫码模式设置
    scanMode: 'custom', // 'custom' 或 'wechat'
    showModeSelector: false,
    
    // 离线模式状态
    isOfflineMode: false,
    
    // 初始化状态
    isInitializing: true,
    initializationError: null,
    showOfflineBanner: false
  },

  onLoad: function(options) {
    console.log('首页加载');
    
    // 检查应用初始化状态
    this.checkAppInitialization();
    
    this.loadScanMode();
    
    // 如果应用还在初始化，则不加载数据，等待初始化完成
    if (!this.data.isInitializing) {
      this.loadData();
      this.checkOfflineMode();
    }
    
    // 检查是否需要自动扫码
    if (options.autoScan === 'true') {
      // 延迟一点时间确保页面完全加载
      var self = this;
      setTimeout(function() {
        if (!self.data.isInitializing) {
          self.startScan();
        }
      }, 500);
    }
  },

  onShow: function() {
    console.log('首页显示');
    
    // 检查应用初始化状态
    this.checkAppInitialization();
    
    // 如果应用还在初始化，则不刷新数据
    if (!this.data.isInitializing) {
      // 页面显示时刷新数据
      this.loadData();
      this.checkOfflineMode();
    }
  },

  // 检查应用初始化状态
  checkAppInitialization: function() {
    try {
      const app = getApp();
      const isInitializing = app.isInitializing();
      const initError = app.getInitializationError();
      
      this.setData({
        isInitializing: isInitializing,
        initializationError: initError
      });
      
      console.log('应用初始化状态:', { isInitializing, initError });
    } catch (error) {
      console.error('检查初始化状态失败:', error);
      // 如果无法获取状态，假设初始化已完成
      this.setData({
        isInitializing: false,
        initializationError: null
      });
    }
  },

  // 应用初始化完成回调
  onAppInitComplete: function(success) {
    console.log('收到应用初始化完成通知，成功:', success);
    
    this.setData({
      isInitializing: false
    });
    
    if (success) {
      // 初始化成功，加载数据
      this.loadData();
      this.checkOfflineMode();
    } else {
      // 初始化失败，显示离线模式
      this.handleInitializationFailure();
    }
  },

  // 处理初始化失败
  handleInitializationFailure: function() {
    console.log('处理初始化失败，进入离线模式');
    
    // 延迟显示离线横幅，给用户更好的体验
    setTimeout(() => {
      this.setData({
        showOfflineBanner: true
      });
    }, 500);
    
    // 仍然加载本地数据
    this.loadData();
    this.checkOfflineMode();
  },

  // 加载所有数据
  loadData: function() {
    try {
      this.loadHistoryStats();
      this.loadRecentItems();
    } catch (error) {
      console.error('加载数据失败:', error);
    }
  },

  // 加载扫码模式设置
  loadScanMode: function() {
    try {
      var savedMode = wx.getStorageSync('scanMode');
      if (savedMode === 'custom' || savedMode === 'wechat') {
        this.setData({
          scanMode: savedMode
        });
        console.log('加载扫码模式:', savedMode);
      } else {
        // 默认使用自定义模式
        this.setData({
          scanMode: 'custom'
        });
        console.log('使用默认扫码模式: custom');
      }
    } catch (error) {
      console.error('加载扫码模式失败:', error);
      this.setData({
        scanMode: 'custom'
      });
    }
  },

  // 检查离线模式状态
  checkOfflineMode: function() {
    try {
      const app = getApp();
      const isOffline = app.isOfflineMode();
      
      this.setData({
        isOfflineMode: isOffline
      });
      
      console.log('当前离线模式状态:', isOffline);
    } catch (error) {
      console.error('检查离线模式失败:', error);
      this.setData({
        isOfflineMode: false
      });
    }
  },

  // 切换离线模式（测试功能）
  toggleOfflineMode: function(e) {
    const isOffline = e.detail.value;
    console.log('手动切换离线模式:', isOffline);
    
    try {
      const app = getApp();
      
      // 更新全局状态
      app.globalData.isOfflineMode = isOffline;
      
      // 更新本地存储
      if (isOffline) {
        wx.setStorageSync('app_offline_mode', true);
        wx.setStorageSync('test_offline_mode', true); // 标记为测试模式
      } else {
        wx.removeStorageSync('app_offline_mode');
        wx.removeStorageSync('test_offline_mode');
      }
      
      // 更新页面状态
      this.setData({
        isOfflineMode: isOffline
      });
      
      // 显示状态提示
      if (isOffline) {
        wx.showToast({
          title: '已切换为离线模式',
          icon: 'none',
          duration: 1500
        });
      } else {
        wx.showToast({
          title: '已切换为在线模式',
          icon: 'success',
          duration: 1500
        });
      }
      
    } catch (error) {
      console.error('切换离线模式失败:', error);
      wx.showToast({
        title: '切换失败',
        icon: 'error'
      });
    }
  },

  // 加载历史记录统计
  loadHistoryStats: function() {
    const historyManager = require('../../utils/history-manager.js');
    const stats = historyManager.getHistoryStats();
    this.setData({
      totalHistory: stats.scanCount
    });
  },

  // 加载最近使用项目
  loadRecentItems: function() {
    try {
      var scanHistory = wx.getStorageSync('scanHistory') || [];
      var self = this;
      
      // 只显示扫描历史，按时间排序
      var allItems = scanHistory
        .sort(function(a, b) { 
          return (b.scanTime || b.timestamp || 0) - (a.scanTime || a.timestamp || 0);
        })
        .slice(0, 6);
      
      this.setData({
        recentItems: allItems.map(function(item) {
          return self.processRecentItem(item);
        })
      });
    } catch (error) {
      console.error('加载最近使用项目失败:', error);
      this.setData({ recentItems: [] });
    }
  },

  // 处理最近使用项目
  processRecentItem: function(item) {
    var content = item.content || '';
    var isGenerated = !!item.type; // 生成的记录有type字段
    
    // 识别内容类型
    var contentType = this.identifyContentType(content);
    
    // 生成标题
    var title = this.generateItemTitle(content, contentType);
    
    // 生成时间显示
    var time = this.formatItemTime(item.scanTime || item.timestamp);
    
    // 使用Object.assign替代扩展运算符
    return Object.assign({}, item, {
      type: contentType.type,
      typeText: contentType.text,
      title: title,
      time: time,
      isGenerated: isGenerated
    });
  },

  // 识别内容类型
  identifyContentType: function(content) {
    // URL检测
    if (/^https?:\/\/.+/i.test(content)) {
      return { type: 'url', text: '网址' };
    }
    
    // WiFi信息检测
    if (/^WIFI:/i.test(content)) {
      return { type: 'wifi', text: 'WiFi' };
    }
    
    // 电话号码检测
    if (/^tel:/i.test(content) || /^(\+?86)?1[3-9]\d{9}$/.test(content)) {
      return { type: 'phone', text: '电话' };
    }
    
    // 联系人信息检测
    if (/^BEGIN:VCARD/i.test(content)) {
      return { type: 'contact', text: '联系人' };
    }
    
    // 邮箱检测
    if (/^mailto:/i.test(content) || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(content)) {
      return { type: 'email', text: '邮箱' };
    }
    
    // 地理位置检测
    if (/^geo:/i.test(content)) {
      return { type: 'location', text: '位置' };
    }
    
    // 默认为文本
    return { type: 'text', text: '文本' };
  },

  // 生成项目标题
  generateItemTitle: function(content, contentType) {
    var maxLength = 12;
    
    switch (contentType.type) {
      case 'wifi':
        var wifiMatch = content.match(/S:([^;]*)/);
        return wifiMatch ? wifiMatch[1] : '未知网络';
      
      case 'url':
        try {
          var url = new URL(content);
          return url.hostname;
        } catch (e) {
          return content.substring(0, maxLength);
        }
      
      case 'phone':
        return content.replace(/^tel:/, '');
      
      case 'email':
        return content.replace(/^mailto:/, '');
      
      case 'contact':
        var nameMatch = content.match(/FN:([^\r\n]*)/);
        return nameMatch ? nameMatch[1] : '联系人';
      
      default:
        return content.length > maxLength ? 
          content.substring(0, maxLength) + '...' : content;
    }
  },

  // 格式化项目时间
  formatItemTime: function(timestamp) {
    if (!timestamp) return '未知时间';
    
    var now = new Date();
    var time = new Date(timestamp);
    var timeDiff = now - time;
    
    if (timeDiff < 60000) { // 1分钟内
      return '刚刚';
    } else if (timeDiff < 3600000) { // 1小时内
      return Math.floor(timeDiff / 60000) + '分钟前';
    } else if (timeDiff < 86400000) { // 24小时内
      return Math.floor(timeDiff / 3600000) + '小时前';
    } else if (timeDiff < 604800000) { // 7天内
      return Math.floor(timeDiff / 86400000) + '天前';
    } else {
      var month = time.getMonth() + 1;
      var day = time.getDate();
      return month + '月' + day + '日';
    }
  },

  // 开始扫码 - 根据模式选择
  startScan: function() {
    // 检查是否可以操作
    if (!this.checkCanOperate()) return;
    
    console.log('开始扫码 - 模式:', this.data.scanMode, '离线模式:', this.data.isOfflineMode);
    
    // 设置扫码动画
    this.setData({
      scanAnimation: true
    });
    
    // 离线模式下强制使用微信API扫码
    if (this.data.isOfflineMode) {
      console.log('离线模式，使用微信API扫码');
      this.startWechatScan();
      return;
    }
    
    // 根据当前模式选择扫码方式
    if (this.data.scanMode === 'custom') {
      this.startCustomScan();
    } else {
      this.startWechatScan();
    }
  },

  // 自定义摄像头扫码
  startCustomScan: function() {
    console.log('启动自定义摄像头扫码');
    
    var self = this;
    
    // 跳转到自定义扫码页面
    wx.navigateTo({
      url: '/pages/custom-scan/custom-scan',
      success: function() {
        console.log('跳转到自定义扫码页面成功');
      },
      fail: function(err) {
        console.error('跳转到自定义扫码页面失败:', err);
        // 如果自定义扫码页面跳转失败，回退到微信API
        self.startWechatScan();
      },
      complete: function() {
        // 停止扫码动画
        setTimeout(() => {
          self.setData({
            scanAnimation: false
          });
        }, 500);
      }
    });
  },

  // 微信API扫码（备用方法）
  startWechatScan: function() {
    console.log('开始扫码 - 使用微信API');
    
    var self = this;
    
    wx.scanCode({
      onlyFromCamera: false, // 支持摄像头扫码+相册选择
      scanType: ['qrCode', 'datamatrix', 'pdf417'],
      success: function(res) {
        console.log('微信API扫码成功:', res);
        self.handleScanResult(res);
      },
      fail: function(err) {
        console.error('微信API扫码失败:', err);
        
        // 检查是否是用户主动取消
        if (err.errMsg && err.errMsg.includes('cancel')) {
          // 用户取消，不显示错误提示
          return;
        }
        
        // 真正的扫码失败才显示提示
        wx.showModal({
          title: '识别失败',
          content: '无法识别二维码。请确保二维码清晰可见，或尝试选择相册中的图片进行识别。',
          confirmText: '知道了',
          showCancel: false
        });
      },
      complete: function() {
        // 停止扫码动画
        self.setData({
          scanAnimation: false
        });
      }
    });
  },

  // 处理扫码结果
  handleScanResult: function(result) {
    console.log('处理扫码结果:', result);
    
    // 兼容不同的结果格式
    var content;
    if (typeof result === 'string') {
      // 直接传入字符串（自定义扫码页面）
      content = result;
    } else if (result.result) {
      // 微信API扫码结果格式
      content = result.result;
    } else {
      console.error('未知的扫码结果格式:', result);
      return;
    }
    
    this.saveScanHistory(content);
    this.processScanResult(content);
  },

  // 保存扫描历史
  saveScanHistory: function(content) {
    const historyManager = require('../../utils/history-manager.js');
    const success = historyManager.saveScanRecord(content);
    
    if (success) {
      // 更新页面数据
      this.loadData();
    }
  },

  // 处理扫描结果
  processScanResult: function(content) {
    console.log('处理扫描内容:', content);
    
    // URL处理
    if (/^https?:\/\/.+/i.test(content)) {
      wx.showModal({
        title: '发现网址',
        content: content,
        confirmText: '复制',
        showCancel: false,
        success: function(res) {
          if (res.confirm) {
            // 复制到剪贴板
            wx.setClipboardData({
              data: content,
              success: function() {
                wx.showToast({
                  title: '已复制',
                  icon: 'success'
                });
              }
            });
          }
        }
      });
      return;
    }
    
    // WiFi信息处理
    if (/^WIFI:/i.test(content)) {
      var wifiMatch = content.match(/WIFI:T:([^;]*);S:([^;]*);P:([^;]*);H:([^;]*);?/);
      if (wifiMatch) {
        var wifiInfo = '网络名称: ' + wifiMatch[2] + '\n' +
                      '密码: ' + wifiMatch[3] + '\n' +
                      '加密类型: ' + wifiMatch[1];
        
        wx.showModal({
          title: 'WiFi信息',
          content: wifiInfo,
          confirmText: '复制密码',
          cancelText: '知道了',
          success: function(res) {
            if (res.confirm) {
              wx.setClipboardData({
                data: wifiMatch[3],
                success: function() {
                  wx.showToast({
                    title: '密码已复制',
                    icon: 'success'
                  });
                }
              });
            }
          }
        });
        return;
      }
    }
    
    // 电话号码处理
    if (/^tel:/i.test(content) || /^(\+?86)?1[3-9]\d{9}$/.test(content)) {
      var phoneNumber = content.replace(/^tel:/, '');
      wx.showModal({
        title: '电话号码',
        content: phoneNumber,
        confirmText: '拨打',
        cancelText: '复制',
        success: function(res) {
          if (res.confirm) {
            wx.makePhoneCall({
              phoneNumber: phoneNumber,
              fail: function() {
                wx.showToast({
                  title: '拨打失败',
                  icon: 'none'
                });
              }
            });
          } else if (res.cancel) {
            wx.setClipboardData({
              data: phoneNumber,
              success: function() {
                wx.showToast({
                  title: '已复制',
                  icon: 'success'
                });
              }
            });
          }
        }
      });
      return;
    }
    
    // 邮箱处理
    if (/^mailto:/i.test(content) || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(content)) {
      var email = content.replace(/^mailto:/, '');
      wx.showModal({
        title: '邮箱地址',
        content: email,
        confirmText: '复制',
        showCancel: false,
        success: function(res) {
          if (res.confirm) {
            wx.setClipboardData({
              data: email,
              success: function() {
                wx.showToast({
                  title: '已复制',
                  icon: 'success'
                });
              }
            });
          }
        }
      });
      return;
    }
    
    // 普通文本
    wx.showModal({
      title: '扫描结果',
      content: content.length > 100 ? content.substring(0, 100) + '...' : content,
      confirmText: '复制',
      success: function(res) {
        if (res.confirm) {
          wx.setClipboardData({
            data: content,
            success: function() {
              wx.showToast({
                title: '已复制',
                icon: 'success'
              });
            }
          });
        }
      }
    });
  },

  // 检查是否可以操作
  checkCanOperate: function() {
    if (this.data.isInitializing) {
      wx.showToast({
        title: '初始化中，请稍候...',
        icon: 'loading',
        duration: 1500
      });
      return false;
    }
    return true;
  },

  // 前往生成二维码页面
  goToGenerateQR: function() {
    if (!this.checkCanOperate()) return;
    
    wx.navigateTo({
      url: '/pages/generate-qr/generate-qr'
    });
  },

  // 前往生成条形码页面
  goToGenerateBarcode: function() {
    if (!this.checkCanOperate()) return;
    
    wx.navigateTo({
      url: '/pages/generate-barcode/generate-barcode'
    });
  },

  // 前往历史记录页面
  goToHistory: function() {
    if (!this.checkCanOperate()) return;
    
    wx.navigateTo({
      url: '/pages/history/history'
    });
  },



  // 打开相册扫码
  chooseImage: function() {
    // 检查是否可以操作
    if (!this.checkCanOperate()) return;
    
    console.log('打开相册扫码');
    
    var self = this;
    
    // 直接调用扫码，但允许从相册选择
    wx.scanCode({
      onlyFromCamera: false, // 允许从相册选择
      scanType: ['qrCode', 'datamatrix', 'pdf417'],
      success: function(res) {
        console.log('图片识别成功:', res);
        self.handleScanResult(res);
      },
      fail: function(err) {
        console.error('图片识别失败:', err);
        
        // 检查是否是用户主动取消
        if (err.errMsg && err.errMsg.includes('cancel')) {
          // 用户取消，不显示错误提示
          return;
        }
        
        // 真正的识别失败才显示提示
        wx.showModal({
          title: '识别失败',
          content: '无法识别图片中的二维码。请确保图片清晰且包含标准二维码（不支持微型二维码和条形码）。\n\n提示：点击"打开相册"后，请选择"从相册选择"选项。',
          confirmText: '知道了',
          showCancel: false
        });
      }
    });
  },

  // 查看最近使用项目
  viewRecentItem: function(e) {
    var item = e.currentTarget.dataset.item;
    
    // 为弹窗准备完整的数据
    var fullItem = Object.assign({}, item, {
      sourceText: item.isGenerated ? '生成' : '扫描',
      fullTime: this.formatFullTime(new Date(item.scanTime || item.timestamp))
    });
    
    this.setData({
      currentRecentItem: fullItem,
      showRecentDetail: true
    });
  },

  // 隐藏最近使用详情弹窗
  hideRecentDetail: function() {
    this.setData({
      showRecentDetail: false,
      currentRecentItem: null
    });
  },

  // 阻止事件冒泡
  stopPropagation: function() {
    // 空函数，用于阻止事件冒泡
  },

  // 复制最近使用内容
  copyRecentContent: function() {
    var content = this.data.currentRecentItem.content;
    var self = this;
    
    wx.setClipboardData({
      data: content,
      success: function() {
        wx.showToast({
          title: '已复制',
          icon: 'success'
        });
        self.hideRecentDetail();
      },
      fail: function() {
        wx.showToast({
          title: '复制失败',
          icon: 'none'
        });
      }
    });
  },

  // 分享最近使用内容
  shareRecentContent: function() {
    var item = this.data.currentRecentItem;
    var self = this;
    
    wx.showActionSheet({
      itemList: ['发送给朋友', '分享到朋友圈', '复制内容'],
      success: function(res) {
        switch (res.tapIndex) {
          case 0:
            // 发送给朋友的逻辑
            wx.showToast({
              title: '功能开发中',
              icon: 'none'
            });
            break;
          case 1:
            // 分享到朋友圈的逻辑
            wx.showToast({
              title: '功能开发中',
              icon: 'none'
            });
            break;
          case 2:
            // 复制内容
            self.copyRecentContent();
            break;
        }
        
        self.hideRecentDetail();
      }
    });
  },

  // 格式化完整时间
  formatFullTime: function(date) {
    var year = date.getFullYear();
    var month = String(date.getMonth() + 1).padStart(2, '0');
    var day = String(date.getDate()).padStart(2, '0');
    var hour = String(date.getHours()).padStart(2, '0');
    var minute = String(date.getMinutes()).padStart(2, '0');
    var second = String(date.getSeconds()).padStart(2, '0');
    
    return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
  },

  // 广告点击
  onAdClick: function() {
    wx.showToast({
      title: '广告跳转',
      icon: 'none'
    });
  },

  // 关闭广告
  closeAd: function() {
    this.setData({
      showAd: false
    });
  },

  // 分享功能
  onShareAppMessage: function() {
    return {
      title: '小籽二维码 - 扫码生成一站式服务',
      path: '/pages/index/index'
    };
  },

  // 显示扫码模式选择器
  showScanModeSelector: function() {
    console.log('显示扫码模式选择器');
    this.setData({
      showModeSelector: true
    });
    
    // 触感反馈
    wx.vibrateShort({
      type: 'medium'
    });
  },

  // 隐藏扫码模式选择器
  hideModeSelector: function() {
    this.setData({
      showModeSelector: false
    });
  },

  // 设置扫码模式
  setScanMode: function(e) {
    var mode = e.currentTarget.dataset.mode;
    console.log('设置扫码模式:', mode);
    
    this.setData({
      scanMode: mode,
      showModeSelector: false
    });
    
    // 触感反馈
    wx.vibrateShort({
      type: 'light'
    });
    
    // 显示提示
    var modeText = mode === 'custom' ? '自定义摄像头' : '微信API扫码';
    wx.showToast({
      title: '已切换到' + modeText,
      icon: 'none',
      duration: 2000
    });
    
    // 保存模式设置到本地存储
    try {
      wx.setStorageSync('scanMode', mode);
    } catch (error) {
      console.error('保存扫码模式失败:', error);
    }
  },

  // 停止事件冒泡（模式选择器用）
  stopPropagation: function() {
    // 阻止事件冒泡
  }
});
